/**
 * @Author: linzp
 * @Date: 2021/10/13/15:25
 * 2、对象适配器 委托的模式
 */
public class Demo2 {
    // 目标接口，或称为标准接口
    interface Target {
        public void request();
    }

    // 原始需要适配的类，只提供普通功能
    static class ConcreteTarget implements Demo2.Target {
        @Override
        public void request() {
            System.out.println("普通类 220V");
        }
    }

    // 适配成的类
    static class Adaptee {
        public void specificRequest() {
            System.out.println("被适配类具有 110V 功能...");
        }
    }

    // 适配器类，直接关联被适配类，同时实现标准接口
    static class Adapter implements Target{
        // 直接关联被适配类
        private Adaptee adaptee;

        // 可以通过构造函数传入具体需要适配的被适配类对象
        public Adapter (Adaptee adaptee) {
            this.adaptee = adaptee;
        }

        @Override
        public void request() {
            // 这里是使用委托的方式完成特殊功能
            this.adaptee.specificRequest();
        }
    }

    public static void main(String[] args) {
        Target concreteTarget = new ConcreteTarget();
        concreteTarget.request();

        Target adapter = new Adapter(new Adaptee());
        adapter.request();

    }


}
